﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Diagnostics.CodeAnalysis;

namespace LotroData
{
    /// <summary>
    /// Defines the types of XML requests that can be triggered.
    /// </summary>
    public enum LotroXmlRequestType
    {
        /// <summary>
        /// An Unknown request type
        /// </summary>
        Unknown,
        /// <summary>
        /// A CharacterSheet request type
        /// </summary>
        CharacterSheet,
        /// <summary>
        /// A GuildRoster request type
        /// </summary>
        GuildRoster,
        /// <summary>
        /// An Item request type
        /// </summary>
        Item
    }

    /// <summary>
    /// Defines the different LoTRO worlds (servers).
    /// </summary>
    public enum LotroWorld
    {
        /// <summary>
        /// An unknown world.
        /// </summary>
        Unknown,
        /// <summary>
        /// The Arkenstone world.
        /// </summary>
        Arkenstone,
        /// <summary>
        /// The Brandywine world.
        /// </summary>
        Brandywine,
        /// <summary>
        /// The Elendilmir world.
        /// </summary>
        Elendilmir,
        /// <summary>
        /// The Firefoot world.
        /// </summary>
        Firefoot,
        /// <summary>
        /// The Gladden world.
        /// </summary>
        Gladden,
        /// <summary>
        /// The Landroval world.
        /// </summary>
        Landroval,
        /// <summary>
        /// The Meneldor world.
        /// </summary>
        Meneldor,
        /// <summary>
        /// The Nimrodel world.
        /// </summary>
        Nimrodel,
        /// <summary>
        /// The Silverlode world.
        /// </summary>
        Silverlode,
        /// <summary>
        /// The Vilya world.
        /// </summary>
        Vilya,
        /// <summary>
        /// The Windfola world.
        /// </summary>
        Windfola
    }

    /// <summary>
    /// Defines the different LoTRO character classes.
    /// </summary>
    public enum LotroClass
    {
        /// <summary>
        /// An unknown class.
        /// </summary>
        Unknown,
        /// <summary>
        /// The Champion class.
        /// </summary>
        [LotroFreeCharacter]
        Champion,
        /// <summary>
        /// The Rune-keeper class.
        /// </summary>
        [StringValue("Rune-keeper")]
        [LotroFreeCharacter]
        Runekeeper,
        /// <summary>
        /// The Minstrel class.
        /// </summary>
        [LotroFreeCharacter]
        Minstrel,
        /// <summary>
        /// The Captain class.
        /// </summary>
        [LotroFreeCharacter]
        Captain,
        /// <summary>
        /// The Guardian class.
        /// </summary>
        [LotroFreeCharacter]
        Guardian,
        /// <summary>
        /// The Lore-master class.
        /// </summary>
        [StringValue("Lore-master")]
        [LotroFreeCharacter]
        Loremaster,
        /// <summary>
        /// The Hunter class.
        /// </summary>
        [LotroFreeCharacter]
        Hunter,
        /// <summary>
        /// The Burglar class.
        /// </summary>
        [LotroFreeCharacter]
        Burglar,
        /// <summary>
        /// The Warden class.
        /// </summary>
        [LotroFreeCharacter]
        Warden,
        /// <summary>
        /// The Warleader class.
        /// </summary>
        Warleader,
        /// <summary>
        /// The Reaver class.
        /// </summary>
        Reaver,
        /// <summary>
        /// The Blackarrow class.
        /// </summary>
        Blackarrow,
        /// <summary>
        /// The Weaver class.
        /// </summary>
        Weaver,
        /// <summary>
        /// The Stalker class.
        /// </summary>
        Stalker,
        /// <summary>
        /// The Defiler class.
        /// </summary>
        Defiler
    }

    /// <summary>
    /// Defines the different LoTRO character races.
    /// </summary>
    public enum LotroRace
    {
        /// <summary>
        /// An unknown race.
        /// </summary>
        Unknown,
        /// <summary>
        /// The Elf race.
        /// </summary>
        Elf,
        /// <summary>
        /// The Hobbit race.
        /// </summary>
        Hobbit,
        /// <summary>
        /// The Race of Man.
        /// </summary>
        [StringValue("Race of Man")]
        RaceofMan,
        /// <summary>
        /// The Dwarf race.
        /// </summary>
        Dwarf,
        /// <summary>
        /// The Uruk race.
        /// </summary>
        Uruk,
        /// <summary>
        /// The Orc race.
        /// </summary>
        Orc,
        /// <summary>
        /// The Spider race.
        /// </summary>
        Spider,
        /// <summary>
        /// The Warg race.
        /// </summary>
        Warg
    }

    /// <summary>
    /// Defines the different vocations a LoTRO character may have.
    /// </summary>
    public enum LotroVocation
    {
        /// <summary>
        /// An unknown vocation.
        /// </summary>
        Unknown,
        /// <summary>
        /// The Armsman vocation.
        /// </summary>
        Armsman,
        /// <summary>
        /// The Armourer vocation.
        /// </summary>
        Armourer,
        /// <summary>
        /// The Explorer vocation.
        /// </summary>
        Explorer,
        /// <summary>
        /// The Historian vocation.
        /// </summary>
        Historian,
        /// <summary>
        /// The Tinker vocation.
        /// </summary>
        Tinker,
        /// <summary>
        /// The Woodsman vocation.
        /// </summary>
        Woodsman,
        /// <summary>
        /// The Yeoman vocation.
        /// </summary>
        Yeoman
    }

    /// <summary>
    /// Defines the different professions a LoTRO character may have.
    /// </summary>
    public enum LotroProfession
    {
        /// <summary>
        /// An unknown profession.
        /// </summary>
        Unknown,
        /// <summary>
        /// The Cook profession.
        /// </summary>
        Cook,
        /// <summary>
        /// The Farmer profession.
        /// </summary>
        Farmer,
        /// <summary>
        /// The Forester profession.
        /// </summary>
        Forester,
        /// <summary>
        /// The Jeweller profession.
        /// </summary>
        Jeweller,
        /// <summary>
        /// The Metalsmith profession.
        /// </summary>
        Metalsmith,
        /// <summary>
        /// The Prospector profession.
        /// </summary>
        Prospector,
        /// <summary>
        /// The Scholar profession.
        /// </summary>
        Scholar,
        /// <summary>
        /// The Tailor profession.
        /// </summary>
        Tailor,
        /// <summary>
        /// The Weaponsmith profession.
        /// </summary>
        Weaponsmith,
        /// <summary>
        /// The Woodworker profession.
        /// </summary>
        Woodworker
    }

    /// <summary>
    /// Defines the different locations that maybe a LoTRO characters origin.
    /// </summary>
    public enum LotroOrigin
    {
        /// <summary>
        /// The character origin is unknown.
        /// </summary>
        Unknown,
        /// <summary>
        /// The character originated from Lórien.
        /// </summary>
        Lórien,
        /// <summary>
        /// The character originated from The Lonely Mountain.
        /// </summary>
        [StringValue("The Lonely Mountain")]
        TheLonelyMountain,
        /// <summary>
        /// The character originated from Gondor.
        /// </summary>
        Gondor,
        /// <summary>
        /// The character originated from Fallohide.
        /// </summary>
        Fallohide,
        /// <summary>
        /// The character originated from Mirkwood.
        /// </summary>
        Mirkwood,
        /// <summary>
        /// The character originated from Rohan.
        /// </summary>
        Rohan,
        /// <summary>
        /// The character originated from Bree-land.
        /// </summary>
        [StringValue("Bree-land")]
        Breeland,
        /// <summary>
        /// The character originated from Lindon.
        /// </summary>
        Lindon,
        /// <summary>
        /// The character originated from the Iron Hills.
        /// </summary>
        [StringValue("Iron Hills")]
        IronHills,
        /// <summary>
        /// The character originated from the Grey Mountains.
        /// </summary>
        [StringValue("Grey Mountains")]
        GreyMountains,
        /// <summary>
        /// The character originated from the Blue Mountains.
        /// </summary>
        [StringValue("Blue Mountains")]
        BlueMountains,
        /// <summary>
        /// The character originated from Rivendell.
        /// </summary>
        Rivendell,
        /// <summary>
        /// The character originated from the Dalelands.
        /// </summary>
        [StringValue("Dale-lands")]
        Dalelands,
        /// <summary>
        /// The character originated from Edhellond.
        /// </summary>
        Edhellond,
        /// <summary>
        /// The character originated from Harfoot.
        /// </summary>
        Harfoot,
        /// <summary>
        /// The character originated from Stoor.
        /// </summary>
        Stoor,
        /// <summary>
        /// The character originated from the White Mountains.
        /// </summary>
        [StringValue("White Mountains")]
        WhiteMountains
    }

    /// <summary>
    /// Defines the different statistics associated with a LoTRO character.
    /// </summary>
    public enum LotroStat
    {
        /// <summary>
        /// An unknown stat.
        /// </summary>
        Unknown,
        /// <summary>
        /// The Morale stat.
        /// </summary>
        Morale,
        /// <summary>
        /// The Power stat.
        /// </summary>
        Power,
        /// <summary>
        /// The Armour stat.
        /// </summary>
        Armour,
        /// <summary>
        /// The Might stat.
        /// </summary>
        Might,
        /// <summary>
        /// The Agility stat.
        /// </summary>
        Agility,
        /// <summary>
        /// The Vitality stat.
        /// </summary>
        Vitality,
        /// <summary>
        /// The Will stat.
        /// </summary>
        Will,
        /// <summary>
        /// The Fate stat.
        /// </summary>
        Fate,
        /// <summary>
        /// The Radiance stat.
        /// </summary>
        Radiance,
        /// <summary>
        /// The Melee Crit stat.
        /// </summary>
        [StringValue("Melee Crit")]
        MeleeCrit,
        /// <summary>
        /// The Ranged Crit stat.
        /// </summary>
        [StringValue("Ranged Crit")]
        RangedCrit,
        /// <summary>
        /// The Tactical Crit stat.
        /// </summary>
        [StringValue("Tactical Crit")]
        TacticalCrit,
        /// <summary>
        /// The Fear Resistance stat.
        /// </summary>
        [StringValue("Fear Resistance")]
        FearResistance,
        /// <summary>
        /// The Wound Resistance stat.
        /// </summary>
        [StringValue("Wound Resistance")]
        WoundResistance,
        /// <summary>
        /// The Disease Resistance stat.
        /// </summary>
        [StringValue("Disease Resistance")]
        DiseaseResistance,
        /// <summary>
        /// The Poison Resistance stat.
        /// </summary>
        [StringValue("Poison Resistance")]
        PoisonResistance,
        /// <summary>
        /// The Common Defence stat.
        /// </summary>
        [StringValue("Common Defence")]
        CommonDef,
        /// <summary>
        /// The Fire Defence stat.
        /// </summary>
        [StringValue("Fire Defence")]
        FireDef,
        /// <summary>
        /// The Frost Defence stat.
        /// </summary>
        [StringValue("Frost Defence")]
        FrostDef,
        /// <summary>
        /// The Shadow Defence stat.
        /// </summary>
        [StringValue("Shadow Defence")]
        ShadowDef,
        /// <summary>
        /// The Lightning Defence stat.
        /// </summary>
        [StringValue("Lightning Defence")]
        LightningDef,
        /// <summary>
        /// The Acid Defence stat.
        /// </summary>
        [StringValue("Acid Defence")]
        AcidDef,
        /// <summary>
        /// The Block stat.
        /// </summary>
        Block,
        /// <summary>
        /// The Evade stat.
        /// </summary>
        Evade,
        /// <summary>
        /// The Parry stat.
        /// </summary>
        Parry
    }

    /// <summary>
    /// Defines the different item slots that a LoTRO character has.
    /// </summary>
    public enum LotroItemSlot
    {
        /// <summary>
        /// An unknown slot.
        /// </summary>
        Unknown,
        /// <summary>
        /// The Head slot.
        /// </summary>
        Head,
        /// <summary>
        /// The Chest slot.
        /// </summary>
        Chest,
        /// <summary>
        /// The Legs slot.
        /// </summary>
        Legs,
        /// <summary>
        /// The Gloves slot.
        /// </summary>
        Gloves,
        /// <summary>
        /// The Boots slot.
        /// </summary>
        Boots,
        /// <summary>
        /// The Shoulder slot.
        /// </summary>
        Shoulder,
        /// <summary>
        /// The Back slot.
        /// </summary>
        Back,
        /// <summary>
        /// The 1st Bracelet slot.
        /// </summary>
        Bracelet1,
        /// <summary>
        /// The 2nd Bracelet slot.
        /// </summary>
        Bracelet2,
        /// <summary>
        /// The Necklace slot.
        /// </summary>
        Necklace,
        /// <summary>
        /// The 1st Ring slot.
        /// </summary>
        Ring1,
        /// <summary>
        /// The 2nd Ring slot.
        /// </summary>
        Ring2,
        /// <summary>
        /// The 1st Earring slot.
        /// </summary>
        Earring1,
        /// <summary>
        /// The 2nd Earring slot.
        /// </summary>
        Earring2,
        /// <summary>
        /// The 1st Pocket slot.
        /// </summary>
        Pocket1,
        /// <summary>
        /// The Primary Weapon slot.
        /// </summary>
        WeaponPrimary,
        /// <summary>
        /// The Secondary Weapon slot.
        /// </summary>
        WeaponSecondary,
        /// <summary>
        /// The Ranged Weapon slot.
        /// </summary>
        WeaponRanged,
        /// <summary>
        /// The Craft Tool slot.
        /// </summary>
        CraftTool,
        /// <summary>
        /// The Last slot.
        /// </summary>
        Last
    }

    /// <summary>
    /// Defines the different themes of LoTRO guild.
    /// </summary>
    public enum LotroGuildTheme
    {
        /// <summary>
        /// An unknown guild theme.
        /// </summary>
        Unknown,
        /// <summary>
        /// The Mixed Kinship guild theme.
        /// </summary>
        [StringValue("Mixed Kinship Theme")]
        MixedKinshipTheme,
        /// <summary>
        /// The Elf Kinship guild theme.
        /// </summary>
        [StringValue("Elf Kinship Theme")]
        ElfKinshipTheme,
        /// <summary>
        /// The Hobbit Kinship guild theme.
        /// </summary>
        [StringValue("Hobbit Kinship Theme")]
        HobbitKinshipTheme,
        /// <summary>
        /// The Dwarf Kinship guild theme.
        /// </summary>
        [StringValue("Dwarf Kinship Theme")]
        DwarfKinshipTheme,
        /// <summary>
        /// The Man Kinship guild theme.
        /// </summary>
        [StringValue("Man Kinship Theme")]
        ManKinshipTheme,
        /// <summary>
        /// The Mixed Tribe guild theme.
        /// </summary>
        [StringValue("Mixed Tribe Theme")]
        MixedTribeTheme,
        /// <summary>
        /// The Ongburz Tribe guild theme.
        /// </summary>
        [StringValue("Ongburz Tribe Theme")]
        OngburzTribeTheme,
        /// <summary>
        /// The Blogmal Tribe guild theme.
        /// </summary>
        [StringValue("Blogmal Tribe Theme")]
        BlogmalTribeTheme,
        /// <summary>
        /// The Tarkrip Tribe guild theme.
        /// </summary>
        [StringValue("Tarkrip Tribe Theme")]
        TarkripTribeTheme
    }

    /// <summary>
    /// Defines the different ranks of a LoTRO guild
    /// </summary>
    public enum LotroGuildRank
    {
        /// <summary>
        /// An unknown guild rank.
        /// </summary>
        Unknown,
        /// <summary>
        /// The Leader guild rank.
        /// </summary>
        Leader,
        /// <summary>
        /// The Officer guild rank.
        /// </summary>
        Officer,
        /// <summary>
        /// The Member guild rank.
        /// </summary>
        Member,
        /// <summary>
        /// The Recruit guild rank.
        /// </summary>
        Recruit
    }

    #region Item Enumerations
    /// <summary>
    /// Defines the sturdiness of an item.
    /// </summary>
    public enum LotroItemSturdiness
    {
        /// <summary>
        /// An unknown sturdiness.
        /// </summary>
        Unknown,
        /// <summary>
        /// Normal sturdiness value.
        /// </summary>
        Normal,
        /// <summary>
        /// Tough sturdiness value.
        /// </summary>
        Tough,
        /// <summary>
        /// Weak sturdiness value.
        /// </summary>
        Weak,
        /// <summary>
        /// Brittle sturdiness value.
        /// </summary>
        Brittle,
        /// <summary>
        /// Substantial sturdiness value.
        /// </summary>
        Substantial
    }

    /// <summary>
    /// Defines the bind type of an item.
    /// </summary>
    public enum LotroItemBindType
    {
        /// <summary>
        /// The non bound type.
        /// </summary>
        [StringValue("Not Bound")]
        NotBound,
        /// <summary>
        /// The bind on acquire type.
        /// </summary>
        [StringValue("Bind On Acquire")]
        BindOnAcquire,
        /// <summary>
        /// The bind on equip type.
        /// </summary>
        [StringValue("Bind on Equip")]
        BindOnEquip
    }

    /// <summary>
    /// Defines the different types of <see cref="LotroItem"/>'s.
    /// </summary>
    public enum LotroItemType
    {
        /// <summary>
        /// An unknown item type.
        /// </summary>
        Unknown,
        /// <summary>
        /// The light armour item type.
        /// </summary>
        [StringValue("Light Armour")]
        LightArmour,
        /// <summary>
        /// The medium armour item type.
        /// </summary>
        [StringValue("Medium Armour")]
        MediumArmour,
        /// <summary>
        /// The heavy armour item type.
        /// </summary>
        [StringValue("Heavy Armour")]
        HeavyArmour,
        /// <summary>
        /// The shield item type.
        /// </summary>
        Shield,
        /// <summary>
        /// The heavy shield item type.
        /// </summary>
        [StringValue("Heavy Shield")]
        HeavyShield,
        /// <summary>
        /// The wardens shield item type.
        /// </summary>
        [StringValue("Warden's Shield")]
        WardensShield,
        /// <summary>
        /// The cloak item type.
        /// </summary>
        Cloak,
        /// <summary>
        /// The armband item type.
        /// </summary>
        Armband,
        /// <summary>
        /// The necklace item type.
        /// </summary>
        Necklace,
        /// <summary>
        /// The earring item type.
        /// </summary>
        Earring,
        /// <summary>
        /// The ring item type.
        /// </summary>
        Ring,
        /// <summary>
        /// The bauble (pocket) item type.
        /// </summary>
        Bauble,
        /// <summary>
        /// The one-handed sword item type.
        /// </summary>
        [StringValue("One-handed Sword")]
        OnehandedSword,
        /// <summary>
        /// The two-handed sword item type.
        /// </summary>
        [StringValue("Two-handed Sword")]
        TwohandedSword,
        /// <summary>
        /// The one-handed axe item type.
        /// </summary>
        [StringValue("One-handed Axe")]
        OnehandedAxe,
        /// <summary>
        /// The two-handed axe item type.
        /// </summary>
        [StringValue("Two-handed Axe")]
        TwohandedAxe,
        /// <summary>
        /// The craft tool item type.
        /// </summary>
        [StringValue("Craft Tool")]
        CraftTool,
        /// <summary>
        /// The class item item type.
        /// </summary>
        [StringValue("Class Item")]
        ClassItem,
        /// <summary>
        /// The one-handed club item type.
        /// </summary>
        [StringValue("One-handed Club")]
        OnehandedClub,
        /// <summary>
        /// The bow item type.
        /// </summary>
        Bow,
        /// <summary>
        /// The crossbow item type.
        /// </summary>
        Crossbow,
        /// <summary>
        /// The instrument item type.
        /// </summary>
        Instrument,
        /// <summary>
        /// The staff item type.
        /// </summary>
        Staff,
        /// <summary>
        /// The spear sword item type.
        /// </summary>
        Spear,
        /// <summary>
        /// The javelin item type.
        /// </summary>
        Javelin,
        /// <summary>
        /// The one-handed mace item type.
        /// </summary>
        [StringValue("One-handed Mace")]
        OnehandedMace,
        /// <summary>
        /// The dagger item type.
        /// </summary>
        Dagger,
        /// <summary>
        /// The one-handed hammer item type.
        /// </summary>
        [StringValue("One-handed Hammer")]
        OnehandedHammer,
        /// <summary>
        /// The two-handed hammer item type.
        /// </summary>
        [StringValue("Two-handed Hammer")]
        TwohandedHammer,
        /// <summary>
        /// The rune-stone item type.
        /// </summary>
        [StringValue("Rune-stone")]
        Runestone,
        /// <summary>
        /// The halberd item type.
        /// </summary>
        Halberd,
        /// <summary>
        /// The potion item type.
        /// </summary>
        Potion
    }

    /// <summary>
    /// Defines the quality (rarity) of a <see cref="LotroItem"/>.
    /// </summary>
    public enum LotroItemQuality
    {
        /// <summary>
        /// The common item quality.
        /// </summary>
        Common,
        /// <summary>
        /// The uncommon item quality.
        /// </summary>
        Uncommon,
        /// <summary>
        /// The incomparable item quality.
        /// </summary>
        Incomparable,
        /// <summary>
        /// The rare item quality.
        /// </summary>
        Rare,
        /// <summary>
        /// The legendary item quality.
        /// </summary>
        Legendary,
        /// <summary>
        /// The epic item quality.
        /// </summary>
        Epic
    }
    #endregion
}
